/**
 * Copyright(c) 2013 Jade Techonologies Co., Ltd.
 *
 * History:
 *   13-7-11 下午1:41 Created by sky
 */
package com.jade.modules.message.sms.comm;

import com.jade.framework.base.comm.ExchangeMessage;

/**
 * 抽象的协议消息。
 *
 * @author sky
 * @version 1.0 13-7-11 下午1:41
 */
public abstract class SmsProtocolMessage
        implements ExchangeMessage
{
    /** 命令或响应类型 */
    private int commandId;

    /** 消息流水号,顺序累加,步长为1,循环使用 */
    private int sequenceId;

    /**
     * 构造短信消息。
     *
     * @param commandId 命令字
     */
    public SmsProtocolMessage(int commandId)
    {
        this(commandId, -1);
    }

    /**
     * 构造短信消息。
     *
     * @param commandId  命令字
     * @param sequenceId 流水号
     */
    public SmsProtocolMessage(int commandId, int sequenceId)
    {
        this.commandId = commandId;
        if (sequenceId == -1) {
            sequenceId = getNextSequenceID();
        }
        this.sequenceId = sequenceId;
    }

    private static int nextId = 1;

    public int getNextSequenceID()
    {
        return getNextID();
    }

    /** 获取下一个SequenceID */
    public static synchronized int getNextID()
    {
        return (nextId++) & 0x7FFFFFFF;
    }

    public int getCommandId()
    {
        return commandId;
    }

    public void setCommandId(int commandId)
    {
        this.commandId = commandId;
    }

    public String getSequenceId()
    {
        return String.valueOf(sequenceId);
    }

    public int getIntSequenceId()
    {
        return sequenceId;
    }

    public void setSequenceId(int sequenceId)
    {
        this.sequenceId = sequenceId;
    }

    /**
     * 消息是否是一个请求。
     *
     * @return 如果是请求，返回ture;否则返回false.
     */
    public abstract boolean isRequest();
}
